﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using SIMA.Entities;
using SIMA.Core.Security;
using SIMA.Core.Enums;

namespace SIMA.Services
{
    // NOTA: si cambia aquí el nombre de interfaz "IEquipoService", también debe actualizar la referencia a "IEquipoService" en App.config.
    [ServiceContract]
    public interface IEquipoService
    {
        #region Get Equipos

        [OperationContract]
        List<T_C_Equipo> GetEquipos(Profile securityProfile);

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginGetEquipos(Profile securityProfile, AsyncCallback callback, object state);

        List<T_C_Equipo> EndGetEquipos(IAsyncResult asyncResult);

        #endregion

        #region Get Equipos Filtered

        [OperationContract]
        List<T_C_Equipo> GetEquiposFiltered(Profile securityProfile, FilterType filter);

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginGetEquiposFiltered(Profile securityProfile, FilterType filter, AsyncCallback callback, object state);

        List<T_C_Equipo> EndGetEquiposFiltered(IAsyncResult asyncResult);

        #endregion

        #region New Equipo

        [OperationContract]
        string NewEquipo(Profile securityProfile, T_C_Equipo newPerfil) ;

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginNewEquipo(Profile securityProfile, T_C_Equipo newPerfil, AsyncCallback callback, object state);

        string EndNewEquipo(IAsyncResult asyncResult);

        #endregion

        #region Update Equipo

        [OperationContract]
        string UpdateEquipo(Profile securityProfile, T_C_Equipo perfilToUpdate, T_C_Equipo perfilUpdated);

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginUpdateEquipo(Profile securityProfile, T_C_Equipo perfilToUpdate, T_C_Equipo perfilUpdated, AsyncCallback callback, object state);

        string EndUpdateEquipo(IAsyncResult asyncResult);

        #endregion

        #region Delete Equipo

        [OperationContract]
        string DeleteEquipo(Profile securityProfile, T_C_Equipo PerfiltoDelete);

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginDeleteEquipo(Profile securityProfile, T_C_Equipo PerfiltoDelete, AsyncCallback callback, object state);

        string EndDeleteEquipo(IAsyncResult asyncResult);

        #endregion

        #region Call Procedure

        [OperationContract]
        List<T_C_Equipo> CallProcedure(Profile securityProfile, string param, CommandType commandType);

        [OperationContract(AsyncPattern = true)]
        IAsyncResult BeginCallProcedure(Profile securityProfile, string param, CommandType commandType, AsyncCallback callback, object state);

        List<T_C_Equipo> EndCallProcedure(IAsyncResult asyncResult);

        #endregion
    }
}
